from aiogram import F, Router, types, Bot
from aiogram.utils import deep_linking
from loguru import logger

from database import models
from tg_bot.filters.user_filter import IsActive
from tg_bot.keyboards import inline
from tg_bot.keyboards.callback_factory import ActionCall
from tg_bot.states.user import PersonalAccount

router = Router()
router.callback_query.filter(IsActive())


@router.callback_query(ActionCall.filter(
    F.action == 'referral_program'
), PersonalAccount.main)
async def referral_program_call(call: types.CallbackQuery,
                                bot: Bot,
                                user: models.TgUser):
    """
    Информация о реферальной программе по инлайн кнопке.

    ----
    :param call: Callback.
    :param bot: Bot для генерации реферальной ссылки.
    :param user: Пользователь.
    :return:
    """
    # TODO Написать метод получения текущего конфига из бд и переписать код ниже.
    bot_config: models.Config = models.Config.objects.filter(
        bot_id=bot.id
    ).first()
    invite_link = await deep_linking.create_start_link(bot, f'{user.user_id}', False)
    text = f'Реферальная программа находится в разработке...\n\n' \
           f'Но уже имеются следующие вещи:\n\n' \
           f'1. Бонус за регистрацию в боте по реферальной ссылке: <b>{bot_config.invite_bonus} руб.</b>\n' \
           f'2. Бонус за приглашение людей во вашей ссылке: <b>{bot_config.ref_bonus} руб.</b>\n\n' \
           f'Ваша реферальная ссылка: <b><code>{invite_link}</code></b>'
    key = await inline.back('personal_account')
    try:
        await call.message.edit_text(text, reply_markup=key)
    except Exception as e:
        logger.warning(e)
        await call.message.answer(text, reply_markup=key)
